package com.unisal.java;

public class MaquinaDeChicletesNova {

	State soldOutState;
	State noQuarterState;
	State hasQuarterState;
	State soldState;
	State winnerState;

	State estado = soldOutState;
	Integer count = 0;

	public MaquinaDeChicletesNova(Integer quantidadeDisponivel) {
		soldOutState = new SoldOutState(this);
		noQuarterState = new NoQuarterState(this);
		hasQuarterState = new HasQuarterState(this);
		soldState = new SoldState(this);
		winnerState = new WinnerState(this);
		this.count = quantidadeDisponivel;
		if (quantidadeDisponivel > 0) {
			estado = noQuarterState;
		}
	}

//	HasQuarterState generateHasQuarterState() {
//		return new HasQuarterState(this);
//	}

	public void insertQuarter() {
		estado.insertQuartuer();
	}

	public void ejectQuarter() {
		estado.ejectQuartuer();
	}

	public void turnCrank() {
		estado.turnCranck();
		estado.dispense();
	}

	public void releaseBall() {
		System.out.println("O chiclete foi liberado para ser retirado");
		if (count != 0) {
			count = count - 1;
		}
	}

	public State getWinnerState() {
		return winnerState;
	}

	public State getEstado() {
		return estado;
	}

	public void setEstado(State estado) {
		this.estado = estado;
	}

	public State getSoldOutState() {
		return soldOutState;
	}

	public State getNoQuarterState() {
		return noQuarterState;
	}

	public State getHasQuarterState() {
		return hasQuarterState;
	}

	public State getSoldState() {
		return soldState;
	}

	public int getCount() {
		return count;
	}

	@Override
	public String toString() {
		String retorno = "sem estado definido";

		if (estado == hasQuarterState)
			retorno = "Moeda inserida";

		if (estado == noQuarterState)
			retorno = "sem Moeda";

		if (estado == soldOutState)
			retorno = "sem chicletes";

		if (estado == soldState)
			retorno = "chiclete vendido";

		if (estado == winnerState)
			retorno = "Jogador venceu";

		return retorno;
	}

}
